#include<iostream>
#include<iomanip>
using namespace std;
int* triangle(int n);
// 定义了一个返回值为指针的函数，用于申请二维数组
void display(int *p,int n);
// 打印杨辉三角
int main()
{
    int n;
    cout<<"Please enter the number of lines of Yang Hui triangle:"<<endl;
    cin>>n;
    // 输入杨辉三角的行数
    int *p =triangle(n);
    // 调用申请二维数组的函数
    display(p,n);
    // 打印杨辉三角
    system("pause");
}
int* triangle(int n)
{
    int *a=new int[n*n]; 
    // 通过new 申请一个 n*n的二维数组
    int i,j;          
    for(i=0;i<n*n;i++)
    {                
        a[i]=0;      
    }                             // 带负号的为在数组中的顺序
    // 将二维数组中的每个数字填为0     -0    -1   -2
    // 避免随机数                     1
    a[0]=1;//a[0]=1              //  -3   -4   -5
    a[n]=1;                      //  1    1     
    a[n+1]=1;                   //   -6    -7   -8
    for(i=2;i<n;i++)            //   1     1+1     1
    {
        a[i*n] =1;
        a[i*n+i]=1;
        for(j=1;j<i;j++)
        {
            a[i*n+j]=a[(i-1)*n+j-1]+a[(i-1)*n+j];// 等于两肩数之和
        }
    }
    return a; // 返回指向二维数组的指针
}
void display(int *a,int n) {
    int i,j;
    for(i=0;i<n;i++)
    {
        for(j=0;j<n-i-1;j++)
            cout<<setw(3)<<" "; // 中间插空
        for(j=0;j<=i;j++)
            cout<<setw(6)<<a[i*n+j];
        cout<<endl;
    }
}
